;
(function($) {
	$.fn.List = function(options_or_method, index) {
		if (!$(this).length) {
			return this;
		}

		if ($.isPlainObject(options_or_method)) {
			// 如果是个初始化
			return this.each(function() {
				var id = $(this).attr('id');
				init(id, options_or_method);
			});
		} else {
			// 如果是一个方法
			var id = $(this).attr('id');
			return do_method(id, options_or_method, index);
		}
	}

	$.fn.List.data = [];

	function init(id, options) {
		var _this = this;
		// 默认设置
		var default_settings = {
			id : '',
			url : '',
			rows : {},
			sort : '',
			order : '',
			page : 1,
			total : 1,
			status : false,
			pagination : true,
			total_page : 1,
			page_size : 10,
			param : {},
      select_all :false ,
			load_handel : null,
			after_load : function() {},
		}
		$.fn.List.data[id] = $.extend(default_settings, options);
    //加载数据
    init_pagination(id);
    init_select_all(id);
		load_data(id);
	}

	// 方法
	function do_method(id, method, index) {
		switch (method) {
		case 'getrows':
			return $.fn.List.data[id].rows;
		case 'getrow':
			return $.fn.List.data[id].rows[index];
		case 'getparam':
			return $.fn.List.data[id].param;
		case 'set_url':
			return $.fn.List.data[id].url = index;
		case 'setpage':
			return $.fn.List.data[id].page = index;
		case 'reload':
			load_data(id);
			break;
		}
	}

	// 加载表内容
	function load_data(id) {
		var opt = $.fn.List.data[id];

		opt.param['page'] = opt.page;
		var post_data = {
			sort : opt.sort,
			order : opt.order,
		};
		$.extend(post_data, $.fn.List.data[id].param);

		if ($.fn.List.data[id].load_handel) {
			$.fn.List.data[id].load_handel.abort();
			$.fn.List.data[id].load_handel = null;
		}

		$.fn.List.data[id].load_handel = $.post($.fn.List.data[id].url, post_data, function(ret) {
			$.fn.List.data[id].load_handel = null;
			$.fn.List.data[id].status = true;
			$.fn.List.data[id].rows = ret.rows;
			$.fn.List.data[id].total = ret.total;

			var data = $.fn.List.data[id];
			var listobj = $("#" + id);

			var html = '';
			if (!data.rows || data.rows.length == 0) {

				html += '<div class="col-sm-12 list-item"><i class="fa fa-info-circle big"></i> <p>暂无记录</p></div>';
			} else {
				// 内容
				$.each(data.rows, function(index, row) {

					html += '<div class="col-md-2 list-item" >' + make_table_html(id, index, row , ret.total ) + '</div>';
				});
			}

      listobj.find('.list-item').remove();
      listobj.append(html);
			$.fn.List.data[id].after_load( data.rows );
      
			// 翻页
			if ($.fn.List.data[id].pagination) {
				var total = $.fn.List.data[id].total;
				var page = $.fn.List.data[id].page;
				var page_size = $.fn.List.data[id].page_size;
				var total_page = Math.ceil(total / page_size);
				var pageobj = listobj.next();
				pageobj.find('.page-info').val( page + ' ' + total_page );
        pageobj.find('.btn-last-page').hide();
        pageobj.find('.btn-next-page').hide();
				if ( page > 1 ) {
          pageobj.find('.btn-last-page').show();
				}
				if ( total_page > 1 ) {
          pageobj.find('.btn-next-page').show();
				}
			}
		});
	}

	// 制作 表数据
	function make_table_html(id, index, row , total_row ) {
		var html = '';
    var listobj = $("#" + id);
    for( var i = 0 ; i < listobj.find('.list-header').find('p').length ; i++ ) {
      var _thisobj = listobj.find('.list-header').find('p').eq(i);
      var style =  !empty(_thisobj.attr('style')) ? 'style="' + _thisobj.attr('style') + '"' : '' ;
      
			if ( _thisobj.data('select-all')) {
				var value = '<input type="checkbox" class="list-select" name="list-select[]" value="' + row.id  + '">';
			} else {
        var field = _thisobj.data('field') ? _thisobj.data('field') : '';
        var value = field != null && field != '' ? row[field] : '';
        value = value == null ? '' : value;
  
        
        if ( _thisobj.data('formatter') ) {
          rowformater = eval( _thisobj.data('formatter') );
          value = rowformater(value, row, index , total_row );
        }
      }
      html += '<p '+ style +'>' + value + ' </p>' ;
    }

		return html;
	}
  
	// 初始化多选
	function init_select_all(id) {
		if (!$.fn.List.data[id].select_all) {
			return;
		}
    var listobj = $("#" + id);
		var tableobj = listobj.find(".list-header");
		tableobj.prepend('<p data-select-all="true"></p>');
	}
  
	// 初始化分页
	function init_pagination(id) {
		if (!$.fn.List.data[id].pagination) {
			return;
		}
		var listobj = $("#" + id);
		var html = '<nav><ul class="pager">';
    html += '<li><a class="btn-last-page" href="#"><i class="fa fa-arrow-left"></i></a></li>';
    html += '<li><a class="page-info" href="javascript:void(0)">1 / 1</a></li>';
    html += '<li><a class="btn-next-page" href="#"><i class="fa fa-arrow-right"></i></a></li>';
    html += '</ul></nav>';

		listobj.after(html);

		var pageobj = listobj.next();

		// 上一页
		pageobj.on('click', '.btn-last-page', function(e) {
			e.preventDefault();
			$.fn.List.data[id].page = $.fn.List.data[id].page - 1;
			load_data(id);
		});

		// 下一页
		pageobj.on('click', '.btn-next-page', function(e) {
			e.preventDefault();
			$.fn.List.data[id].page = Number($.fn.List.data[id].page) + 1;
			load_data(id);
		});
	}
})(jQuery);